diff options
Diffstat (limited to 'app/[lng]/admin/mdg/page.tsx')
| -rw-r--r-- | app/[lng]/admin/mdg/page.tsx | 57 |
1 files changed, 43 insertions, 14 deletions
diff --git a/app/[lng]/admin/mdg/page.tsx b/app/[lng]/admin/mdg/page.tsx index 27416f25..e2926deb 100644 --- a/app/[lng]/admin/mdg/page.tsx +++ b/app/[lng]/admin/mdg/page.tsx @@ -61,6 +61,7 @@ const sampleDefaults: Record<string, string> = { E_ADDRESS: 'contact@test.vendor.com', BP_TX_TYP: 'KR2', TAXNUM: '123-45-67890', + AD_CONSNO: '1', }; // XML escape helper @@ -99,6 +100,25 @@ export default function MDGTestPage() { load(); }, []); + // XML 생성 유틸리티 (폼 데이터 -> SOAP Envelope) + const buildEnvelopeXml = (currentForm: Record<string, string>, defs: VendorFieldDef[]) => { + if (defs.length === 0) return ''; + const bodyContent = defs.map((f) => { + const val = currentForm[f.name] ?? ''; + return `<${f.name}>${escapeXml(val)}</${f.name}>`; + }).join('\n '); + + const supplierXml = `<SUPPLIER_MASTER>\n ${bodyContent}\n </SUPPLIER_MASTER>`; + + return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:p1=\"http://shi.samsung.co.kr/P2_MD/MDZ\">\n <soap:Header/>\n <soap:Body>\n <p1:MT_P2MD3007_S>\n <P2MD3007_S>\n ${supplierXml}\n </P2MD3007_S>\n </p1:MT_P2MD3007_S>\n </soap:Body>\n</soap:Envelope>`; + }; + + // 폼 데이터 변경 시 실시간 XML 생성 + useEffect(() => { + const xml = buildEnvelopeXml(formData, fieldDefs); + setResultXml(xml); + }, [formData, fieldDefs]); + // 폼 데이터 업데이트 const updateField = (field: string, value: string) => { setFormData(prev => ({ ...prev, [field]: value })); @@ -114,33 +134,42 @@ export default function MDGTestPage() { toast.success('폼이 기본값으로 리셋되었습니다.'); }; - // 테스트 송신 실행 + // 테스트 송신 실행 (실제 서버 호출) const handleTestSend = async () => { try { setIsLoading(true); - + // 필수 필드 검증 const requiredFields = fieldDefs.filter(d => d.mandatory).map(d => d.name); const missingFields = requiredFields.filter(field => !formData[field]?.trim()); - + if (missingFields.length > 0) { toast.error(`필수 필드가 누락되었습니다: ${missingFields.join(', ')}`); + setIsLoading(false); return; } - - // XML 생성 - const bodyContent = fieldDefs.map(f => { - const val = formData[f.name] ?? ''; - return `<${f.name}>${escapeXml(val)}</${f.name}>`; - }).join('\n '); - const supplierXml = `<SUPPLIER_MASTER>\n ${bodyContent}\n </SUPPLIER_MASTER>`; + // 서버 API 호출해 송신 + const res = await fetch('/api/mdg/send-vendor-xml', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ envelope: resultXml }), + }); + + const json = await res.json(); + + if (!res.ok || !json.success) { + // 상세 오류 메시지 추출 (vendorCode 기반 또는 직접 오류 메시지) + const detailMsg = json?.results?.[0]?.error ?? json?.message ?? json?.responseText ?? '송신 실패'; + toast.error(`송신 실패: ${detailMsg}`); + setIsLoading(false); + return; + } - const envelope = `<?xml version="1.0" encoding="UTF-8"?>\n<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:p1=\"http://shi.samsung.co.kr/P2_MD/MDZ\">\n <soap:Header/>\n <soap:Body>\n <p1:MT_P2MD3007_S>\n <P2MD3007_S>\n ${supplierXml}\n </P2MD3007_S>\n </p1:MT_P2MD3007_S>\n </soap:Body>\n</soap:Envelope>`; + toast.success('MDG 송신이 완료되었습니다.'); - setResultXml(envelope); - toast.success('요청 XML이 생성되었습니다. 하단 영역을 확인하세요.'); - } catch (error) { console.error('테스트 송신 실패:', error); toast.error('테스트 송신 중 오류가 발생했습니다.'); |
